package ar.edu.utn.frgp.labtec.actions.contrato;

import org.apache.struts2.ServletActionContext;

import ar.edu.utn.frgp.labtec.constants.DBParametersConstants;
import ar.edu.utn.frgp.labtec.constants.ServiceNameConstants;
import ar.edu.utn.frgp.labtec.constants.WebConstants;
import ar.edu.utn.frgp.labtec.entities.Laboratorio;
import ar.edu.utn.frgp.labtec.entities.OrdenDeTrabajo;
import ar.edu.utn.frgp.labtec.entities.RevisionContrato;
import ar.edu.utn.frgp.labtec.service.GestionClienteService;
import ar.edu.utn.frgp.labtec.service.GestionContratoService;
import ar.edu.utn.frgp.labtec.service.GestionLaboratorioService;
import ar.edu.utn.frgp.labtec.service.GestionOrdenTrabajoService;


/**
 * @author Cucurullo Martin
 * The Class InitContratoAction.
 */
@SuppressWarnings("serial")
public class InitContratoAction extends ContratoAction  {
	
	public String execute(){
		
		String returnAction;
		if(idContrato == null){
			idContrato = (Integer)ServletActionContext.getRequest().getAttribute(DBParametersConstants.ID_CONTRATO);
			anioContrato = (String)ServletActionContext.getRequest().getAttribute(DBParametersConstants.ANIO_CONTRATO);
		}
		if(idContrato == null){
			returnAction = WebConstants.SUCCESS_NEW;
		}else{
			
			GestionContratoService contratoService = (GestionContratoService) getContext().getBean(ServiceNameConstants.GESTION_CONTRATO_SERVICE);
			RevisionContrato contrato = contratoService.getContrato(idContrato, anioContrato);
			
			setDatosContrato(contrato);
			returnAction = WebConstants.SUCCESS_UPDATE;
		}
		getListaClientes();
		crearListaLaboratorios();
		return returnAction;
	}

	protected void getListaClientes(){
		if(listClientes == null || listClientes.isEmpty()){
			GestionClienteService clienteService = (GestionClienteService) getContext().getBean(ServiceNameConstants.GESTION_CLIENTE_SERVICE);
			listClientes = clienteService.getClientes();
		}
			
	}
	
	private void setDatosContrato(RevisionContrato contrato){
		
		idContrato = contrato.getIdContrato();
		anioContrato = contrato.getAnioContrato();
		idOrden = contrato.getIdOrden();
		
		if(idOrden != null){
			GestionOrdenTrabajoService gestionOrden = (GestionOrdenTrabajoService) getContext().getBean(ServiceNameConstants.GESTION_ORDEN_TRABAJO_SERVICE);
			OrdenDeTrabajo ordenDeTrabajo =	gestionOrden.getOrdenDeTrabajo(idOrden);
			anioOrden = ordenDeTrabajo.getAnioOrden();
		}
		
		
		/** Cliente */
		codCliente = contrato.getCliente().getCodCliente();
		razonSocial = contrato.getCliente().getRazonSocial();
		responsable = contrato.getCliente().getResponsable();
		cuit = contrato.getCliente().getCuit();
		domicilio = contrato.getCliente().getDomicilio();
		localidad = contrato.getCliente().getLocalidad();
		codigoPostal = contrato.getCliente().getCodigoPostal();
		provincia = contrato.getCliente().getProvincia();
		telefono = contrato.getCliente().getTelefono();
		fax = contrato.getCliente().getFax();
		email = contrato.getCliente().getEmail();
		
		/** Solicitud cliente */
		requisitos = contrato.getRequisitos();
		if(contrato.getLaboratorio() != null){
			laboratorio = contrato.getLaboratorio().getCodLab();
			departamento = contrato.getLaboratorio().getDepartamento().getCodDepto();
			
			idLabDep = laboratorio.toString() + "-" + departamento;
			inicialesLab = contrato.getLaboratorio().getIniciales();
		}
		if(contrato.getUsuRequisitos() != null)
			usuRequisitos = contrato.getUsuRequisitos().getNombre();
		
		fechaRequisitos = formatDate(contrato.getFechaRequisitos());
		
		/** Factibilidad */
		if(contrato.getRecursosDisp() != null)
			recursosDisp = contrato.getRecursosDisp().getCodigo();
		detalleRecDisp = contrato.getDetalleRecDisp();
		if(contrato.getUsuDisponibilidad() != null)
			usuDisponibilidad = contrato.getUsuDisponibilidad().getNombre();
		if(contrato.getFechaDisponibilidad() != null)
			fechaDisponibilidad = formatDate(contrato.getFechaDisponibilidad());
		
		/** Subcontratacion */
		if(contrato.getSubcontratar() != null)
			subcontratar = contrato.getSubcontratar().getCodigo();
		detalleSubc = contrato.getDetalleSubc();
		
		/** Tarea a realizar*/
		if(contrato.getFechaRealizacion() != null)
			fechaRealizacion = formatDate(contrato.getFechaRealizacion());
		trabajoArealizar = contrato.getTrabajoArealizar();
		
		/** Revision */
		if(contrato.getAcuerdoTrabajo() != null)
			acuerdoTrabajo = contrato.getAcuerdoTrabajo().getCodigo();
		causasRechModif = contrato.getCausasRechModif();
		if(contrato.getUsuAcuerdoTrabajo() != null)
			usuAcuerdoTrabajo = contrato.getUsuAcuerdoTrabajo().getNombre();
		if(contrato.getFechaAcuerdoTrabajo() != null)
			fechaAcuerdoTrabajo = formatDate(contrato.getFechaAcuerdoTrabajo());
		
		/** Entrega */
		datosElemMedir = contrato.getDatosElemMedir();
		if(contrato.getEstadoConserv() != null)
			estadoConserv = contrato.getEstadoConserv().getCodigo();
		if(contrato.getFechaEntregaInf() != null)
			fechaEntregaInf = formatDate(contrato.getFechaEntregaInf());
		if(contrato.getRecibioElem() != null)
			recibioElem = contrato.getRecibioElem().getCodigo();
		if(contrato.getFechaRecibioElem() != null)
			fechaRecibioElem = formatDate(contrato.getFechaRecibioElem());
		if(contrato.getUsuEntrega() != null)
			usuEntrega = contrato.getUsuEntrega().getNombre();
		if(contrato.getFechaEntrega() != null)
			fechaEntrega = formatDate(contrato.getFechaEntrega());
	}
	
	private void crearListaLaboratorios(){
		GestionLaboratorioService labService = (GestionLaboratorioService) getContext().getBean(ServiceNameConstants.GESTION_LABORATORIO_SERVICE);
		listaLab = labService.getLaboratorios();
		Laboratorio labVacio = new Laboratorio();
		listaLab.add(0, labVacio);
	}
	
}
